初始化

  如果为一个对象提供了初始式,这个初始式将确定对象的初始值。如果没有提供初始式,全局的(4.9.4节)、名字空间的(8.2节)和局部静态的(7.1.2节、10.2.4节)对象(统称为静态对象)将被自动初始化为适当类型的0。例如,

    int a;            // 意思是 "int a = 0;"
    double d;         // 意思是 "double d = 0.0;"

局部对象(有时称为自动对象)和在自由存储区里建立的对象(有时被称为动态对象或者堆对象)将不会用默认值做初始化。例如,

    void f()
    {
        int x;        // x没有定义良好的值
        // ...
    }

数组和结构的成员,也根据数组或结构是否为静态来确定是否默认地进行初始化。用户定义类型可以有自定义的默认初始化方式(10.4.2节)。

  更复杂的对象需要以多于一个的值作为初始式。数组(5.2.1节)和结构(5.7节)的C风格初始化采用的是 { 和 } 括起的初始式列表描述。带有构造函数的用户定义类型采用的是函数风格的参数表形式(2.5.2节、10.2.3节)。

  请注意,在声明中写一对空的括号总意味着是“函数”(7.1节)。例如,

    int a[] = {1, 2};    // 数组的初始式
    Point z(1, 2);       // 函数风格的初始式(通过构造函数完成初始化)
    int f();             // 函数声明

🔚